一、利用AT指令配置esp8266 |
您所在的位置:网站首页 › esp8266 模式 › 一、利用AT指令配置esp8266 |
文章目录
一、esp8266初探1、esp8266简介:2、esp8266使用方式:什么是AT指令?通过何种方式发送AT指令?
二、STM32串口通信再探1、printf()函数与串口中断函数2、例子①-小试牛刀3、例子②-再进一步
三、局域网内的TCP通信1、什么是TCP?2、配置过程① 设置8266工作模式② 连接WIFI热点③ 建立TCP连接④ 进入透传模式⑤ 开始透传⑥ 退出透传模式
四、esp8266访问外网服务器
一、esp8266初探
1、esp8266简介:
ESP8266EX,由乐鑫公司开发,提供了⼀套⾼度集成的 Wi-Fi SoC解决方案,其低功耗、紧凑设计和⾼稳定性可以满⾜⽤户的需求。ESP8266EX 拥有完整的且⾃成体系的 Wi-Fi ⽹络功能,既能够独⽴应⽤,也可以作为从机搭载于其他主机 MCU 运⾏。 说人话就是,ESP8266EX是一款WIFI芯片,同时,由于它内部集成了处理器之类的,所以它也可以作为一块单片机来使用(可以理解为低配版STM32)。 而我们平常聊起WIFI模块时提到的esp8266,则是这个:ESP8266 系列模组是深圳市安信可科技有限公司开发的一系列基于乐鑫ESP8266EX的超低功耗的UART-WiFi芯片的模组,可以方便地进行二次开发,接入云端服务,实现手机3/4G全球随时随地的控制,加速产品原型设计。 说人话就是,esp8266是利用ESP8266EX芯片加上外围电路做成的一块WIFI模块,可以直接拿来开发使用。 总结一下,esp8266无非就是块WIFI模块,有了它,我们的单片机设备就有了连入WIFI网络的能力,从而实现网络通信以及数据的无线传输。关于esp8266的介绍到此结束,后文提到的esp8266均指esp8266模组,即成品WIFI模块。 2、esp8266使用方式:既然它是WIFI模块,那我们怎么用呢?怎么初始化?怎么配置?怎么和单片机建立连接进行通信?怎么与WIFI建立连接呢?伴随着一大串的问题,耐心往下看: 首先我们要知道一点,esp8266(以下简称8266)是没办法直接拿来就用的(你总不能指望它聪明到一通上电就自动破解你家WIFI密码然后连入WIFI),它需要配置工作模式,需要设置要连接的WIFI热点,需要提前告知它WIFI密码,之类的。总之,拿到8266的第一步就是,配置。 那么,8266如何配置呢?它有三种开发方式:AT指令、SDK开发、Arduino开发。 正如上文简介提到的,8266本身也可以作为单片机,所以自然而然的,我们可以通过“往单片机里烧录程序”的方式来实现8266的开发,这就要用到官方提供的专门的SDK进行开发,然后把自己写好的代码烧录进去(大家一般都把要烧录进去的东西叫做固件,具体我也不是很懂)。另外,由于SDK开发的不方便,于是有了Arduino开发的方式,更为简便。 而这两种开发方式我们这里都不讲,8266作为WIFI模块来使用的话,用AT指令来开发就足够了,而另两种开发方式适用于“除了实现WIFI功能本身还需要实现其他单片机功能”的情况。 于是我们进入正题,通过AT指令来配置8266。 什么是AT指令?这里就不讲太官方的定义了,简单来说,AT指令就是与esp8266交流的语言,以AT作为开头,后面加上具体的指令。比如 AT+RST 就是一个重启的指令。前面我们提到,8266其实也是一块单片机,通电后其内部程序执行,就一直在等待我们向它发送AT指令,一旦受到指令,它就会执行相应的操作并返回相应的值。 通过何种方式发送AT指令?我们已经知道向8266发送AT指令就能够与之进行交互,进而实现配置了。那么,我们要用什么通信方式发送AT指令呢?串口通信。 串口通信不熟的赶紧去补补! 这里我们先不用单片机与8266进行串口通信,我们直接使用usb转ttl用电脑与8266直接连接,然后通过串口调试助手来发送AT指令。(电脑usb采用的是usb电平,而所有的主控制芯片引脚(包括串口的RX,TX,普通IO口)都是TTL电平,所以我们要用到usb转ttl) 这里po一部分AT指令上来,具体更多AT指令请移步乐鑫公司AT指令的相关手册文档。 至此,我们已经了解了如何通过usb转ttl的方式用串口向8266发送AT指令了,而我们所讲的只是零碎的几个AT指令,并没有提到具体某种工作模式需要怎么配置,这个我们留到后面再讲。 . . . 二、STM32串口通信再探前面一章节我们提到如何通过AT指令配置模块,方法是电脑用usb转ttl直接与模块相连实现串口通信。但是,实际开发过程中,我们不可能每次配置模块的时候都要通过串口调试助手逐次发送每条配置指令去初始化模块。高效的方法应该是把要发送的AT指令预先写入单片机,然后通过单片机与8266模块进行串口通信,来实现模块的配置。即:单片机→串口→esp8266 串口通信还没搞熟的赶紧再去补补!!这里再补充一点关于串口的知识,不需要的可以跳过。 1、printf()函数与串口中断函数学过STM32串口通信的朋友,应该都知道我们能够通过printf()函数将一些提示信息打印到串口,进而由电脑端的串口调试助手接收到并显示到电脑屏幕上,方便我们调试程序。但是这具体是怎么实现的呢?那个printf()和串口通信有怎样的关联呢? 在usart.c文件中,我们经常会重定义fputc()函数,这段代码的作用就是,把c语言中的fputc()函数重新定义,并且把它的方向改向串口1。(printf是c语言标准化输出函数,在学c语言的时候,我们经常用printf函数来向电脑屏幕打印数据,最终在那个“小黑框”里输出打印信息。而这里的重定向,就是把信息输出的方向改为串口1,使得printf最终不再是向“小黑框”输出,而是把数据传输到串口。而我们的串口调试助手由于接到printf传输过去的信息,便显示到电脑屏幕上) 关于以上这段串口1接收数据处理代码,不懂的可以移步看我之前的一篇博文:基于STM32F407的串口通信,看完之后或许会有更进一步的理解。 2、例子①-小试牛刀为了加深理解,便于后面我们实现STM32与esp8266的串口通信,我们先来个简单的例子,后面再慢慢循序渐进: 我们知道我们通过串口调试助手向串口1发送数据后,STM32会产生中断,进入上面提到的那个中断函数,当数据发送完毕(即数据末尾为0x0d 0x0a,也就是回车、换行——在串口调试助手上只需要勾选“发送新行”即可)后,USART_RX_STA最高位会置一,标志一次接收完成。 那么我们如何实现“通过串口调试助手向STM32发送数据,STM32原封不动将数据由串口返回给串口调试助手”呢?(即,电脑→串口1→STM32,然后再原路返回,即STM32→串口1→电脑) 很简单,由于串口中断会不断去响应接收到的数据,所以我们只需要在main函数里不断判断USART_RX_STA最高位是否被置一就行了。一旦被置一,说明一次读取完成,读取的数据存放在USART_RX_BUF数组中,我们只需要将该数组遍历输出到串口1即可,注意这里的方向是串口由内向外发送到电脑的串口调试助手。于是串口调试助手上接收到刚才发送出去的数据。分毫不差。 int main(void) { NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置系统中断优先级分组2 delay_init(168); //延时初始化 uart_init(115200); //串口初始化波特率为115200 //通过串口调试助手向串口1发送数据,STM32将串口1接收到的数据原封不动的通过串口1发出,显示到串口调试助手上 while(1) { if(USART_RX_STA&0x8000) //串口1向内接收数据完毕 { len=USART_RX_STA&0x3fff; //得到此次接收到的数据长度 for(t=0;t NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置系统中断优先级分组2 delay_init(168); //延时初始化 uart_init(115200); //串口初始化波特率为115200 usart3_init(115200); //串口3初始化 key_init(); LED_Init(); //初始化与LED连接的硬件接口 //把以下while函数写入定时器中断中,使得main函数得以实现其他功能 while(1) { if(USART_RX_STA&0x8000) //串口1向内接收数据完毕 { len=USART_RX_STA&0x3fff; //得到此次接收到的数据长度 //通过迭代的方式逐次逐位地向串口3发送由串口1接收到的数据 for(t=0;t len=USART3_RX_STA&0x7fff; //得到此次接收到的数据长度 for(t=0;t u16 i,j; va_list ap; va_start(ap,fmt); vsprintf((char*)USART3_TX_BUF,fmt,ap); va_end(ap); i=strlen((const char*)USART3_TX_BUF);//此次发送数据的长度 for(j=0;j |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |